#!/bin/bash

# 检查是否提供了用户名参数
if [ $# -ne 1 ]; then
    echo "使用方法: $0 <用户名>"
    exit 1
fi

USERNAME=$1
USER_HOME="/home/$USERNAME"
SSH_DIR="$USER_HOME/.ssh"
KEY_FILE="$SSH_DIR/id_rsa"
# 获取脚本执行目录
SCRIPT_DIR=$(pwd)
DEST_KEY="$SCRIPT_DIR/$USERNAME.key"

# 检查是否以root权限运行
if [ "$(id -u)" -ne 0 ]; then
    echo "错误: 此脚本需要以root权限运行，请使用sudo或切换到root用户"
    exit 1
fi

# 检查用户是否已存在
if id "$USERNAME" &>/dev/null; then
    echo "警告: 用户 $USERNAME 已存在，将为其配置SSH密钥和docker权限"
else
    # 创建新用户
    echo "创建用户 $USERNAME..."
    adduser --disabled-password --gecos "" $USERNAME
    if [ $? -ne 0 ]; then
        echo "错误: 创建用户失败"
        exit 1
    fi
    # 设置与用户名相同的密码（用于xrdp登录）
    echo "$USERNAME:$USERNAME" | chpasswd
    if [ $? -ne 0 ]; then
        echo "错误: 设置用户密码失败"
        exit 1
    fi
    echo "已为用户 $USERNAME 设置密码（与用户名相同）"
fi

# 将用户添加到docker组
echo "将用户 $USERNAME 添加到docker组..."
usermod -aG docker $USERNAME
if [ $? -ne 0 ]; then
    echo "警告: 添加用户到docker组失败"
fi

# 为用户创建.ssh目录并设置权限
echo "创建SSH目录并设置权限..."
mkdir -p $SSH_DIR
chown $USERNAME:$USERNAME $SSH_DIR
chmod 700 $SSH_DIR

# 生成SSH密钥对（无密码）
if [ ! -f $KEY_FILE ]; then
    echo "生成SSH密钥对..."
    sudo -u $USERNAME ssh-keygen -t ed25519 -N "" -f $KEY_FILE >/dev/null
    if [ $? -ne 0 ]; then
        echo "错误: 生成SSH密钥失败"
        exit 1
    fi
else
    echo "SSH密钥已存在: $KEY_FILE"
fi

# 将公钥添加到authorized_keys
cat $KEY_FILE.pub >> $SSH_DIR/authorized_keys
chown $USERNAME:$USERNAME $SSH_DIR/authorized_keys
chmod 600 $SSH_DIR/authorized_keys

# 复制私钥到脚本执行目录
echo "复制私钥到当前目录..."
cp $KEY_FILE $DEST_KEY

# 获取原执行用户（不是root）
ORIGINAL_USER=$(logname)

# 修改密钥文件权限和所有者
chown $ORIGINAL_USER:$ORIGINAL_USER $DEST_KEY
chmod 600 $DEST_KEY

# 输出结果
echo "操作完成"
echo "私钥已保存到: $DEST_KEY"
echo "用户 $USERNAME 已添加到docker组，下次登录后生效"
